package vista;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListModel;
import javax.swing.SwingConstants;

import org.jdesktop.swingx.JXDatePicker;

import controlador.ControladorAC;
import dto.EmpleadoDTO;
import dto.SucursalDTO;
import dto.TareaDTO;

import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.SwingUtilities;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class PlanDeProduccion extends javax.swing.JFrame {
	private JLabel jLabel1;
	private JLabel jLabel2;
	private JLabel jLabel3;
	private JScrollPane jScrollPane1;
	private JLabel jLabel5;
	private JTextField usuario;
	private JLabel jLabel7;
	private JTextField legajoUsuario;
	private JLabel jLabel6;
	private JSeparator jSeparator3;
	private JScrollPane jScrollPane2;
	private JTable disponibilidad;
	private JSeparator jSeparator2;
	private JSeparator jSeparator1;
	private JLabel jLabel4;
	private JButton salir;
	private JButton actualizar;
	private JButton agregarTarea;
	private JTable tareas;
	private JTextField numero;
	private JXDatePicker fecha;
	private List<TareaDTO> tareasT;
	private List<SucursalDTO> sucursales;
	private TableModel tareasModel;
	private Object[][] objetos;
	private Object[][] objetosDis;
	private TableModel disponibilidadModel;

	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				PlanDeProduccion inst = new PlanDeProduccion(null);
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}

	public PlanDeProduccion(EmpleadoDTO e2) {
		super();
		initGUI(e2);
	}

	private void initGUI(final EmpleadoDTO e2) {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				jLabel1 = new JLabel();
				getContentPane().add(jLabel1);
				jLabel1.setText("Plan de Produccion");
				jLabel1.setBounds(25, 10, 268, 43);
				jLabel1.setFont(new java.awt.Font("Calibri", 0, 22));
			}
			{
				jLabel2 = new JLabel();
				getContentPane().add(jLabel2);
				jLabel2.setText("Numero");
				jLabel2.setBounds(39, 67, 72, 16);
			}
			{

				fecha = new JXDatePicker();
				fecha.setDate(ControladorAC.getInstancia().getFechaPP());
				fecha.setFormats(new SimpleDateFormat("dd/MM/yyyy"));
				fecha.setBounds(103, 102, 142, 23);
				getContentPane().add(fecha);

			}
			{
				numero = new JTextField();
				getContentPane().add(numero);
				numero.setBounds(103, 64, 68, 23);
				String num = String.valueOf(ControladorAC.getInstancia().getNumeroPlanProduccion());
				numero.setText(num);
			}
			{
				jLabel3 = new JLabel();
				getContentPane().add(jLabel3);
				jLabel3.setText("Fecha");
				jLabel3.setBounds(39, 106, 55, 16);
			}
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1);
				jScrollPane1.setBounds(31, 206, 687, 191);
				{
					//Es la list que tiene todas las tareas
					tareasT = ControladorAC.getInstancia().listarTareasActivas();
					
					tareas = new JTable();
					tareasModel = new DefaultTableModel(
							objetos, new String[] {
							"Tarea", "Producto", "Cantidad","Sucursal", "Tiempo Requerido", "Estado"}){
					};
					tareas.setModel(tareasModel);
					jScrollPane1.setViewportView(tareas);
					tareas.setBounds(39, 180, 329, 184);
					tareas.setPreferredSize(new java.awt.Dimension(661, 171));
					tareas.setEditingColumn(0);
					tareas.setEditingRow(0);
					
					//Agrego las tareas en estado "Activa" a la tabla
					objetos= new Object[tareasT.size()][tareas.getColumnCount()];
					int j = 0;
					int i = 0;
					for(TareaDTO t: tareasT){
		
								objetos[j][i] = t.getNumero();
								objetos[j][i+1] = t.getProducto().getNombre(); 
								objetos[j][i+2] = t.getCantidad();
								objetos[j][i+3] = t.getSucursal().getNombre();
								objetos[j][i+4] = t.getTiempoRequerido();
								objetos[j][i+5] = t.getEstado();
						
						j++;
					}
					tareasModel = new DefaultTableModel(
							objetos, new String[] {
							"Tarea", "Producto", "Cantidad","Sucursal", "Tiempo Requerido", "Estado"}){
						
					};
					tareas.setModel(tareasModel);
				}
			}
			{
				agregarTarea = new JButton();
				getContentPane().add(agregarTarea);
				agregarTarea.setText("Nueva Tarea");
				agregarTarea.setBounds(730, 207, 123, 35);
				agregarTarea.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						AgregarTarea a = new AgregarTarea(e2);
						a.setVisible(true);
					}
				});
			}
			{
				actualizar = new JButton();
				getContentPane().add(actualizar);
				actualizar.setBounds(677, 173, 33, 28);
				actualizar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						tareasT = ControladorAC.getInstancia().listarTareasActivas();
						
						tareas = new JTable();
						tareasModel = new DefaultTableModel(
								objetos, new String[] {
								"Tarea", "Producto", "Cantidad","Sucursal", "Tiempo Requerido", "Estado"}){
						};
						tareas.setModel(tareasModel);
						jScrollPane1.setViewportView(tareas);
						tareas.setBounds(39, 180, 329, 184);
						tareas.setPreferredSize(new java.awt.Dimension(661, 171));
						tareas.setEditingColumn(0);
						tareas.setEditingRow(0);
						
						//Agrego las tareas en estado "Activa" a la tabla
						objetos= new Object[tareasT.size()][tareas.getColumnCount()];
						int j = 0;
						int i = 0;
						for(TareaDTO t: tareasT){
			
									objetos[j][i] = t.getNumero();
									objetos[j][i+1] = t.getProducto().getNombre(); 
									objetos[j][i+2] = t.getCantidad();
									objetos[j][i+3] = t.getSucursal().getNombre();
									objetos[j][i+4] = t.getTiempoRequerido();
									objetos[j][i+5] = t.getEstado();
							
							j++;
						}
						tareasModel = new DefaultTableModel(
								objetos, new String[] {
								"Tarea", "Producto", "Cantidad","Sucursal", "Tiempo Requerido", "Estado"}){
							
						};
						tareas.setModel(tareasModel);
						
						disponibilidadModel = new DefaultTableModel(
								null, new String[] { "Sucursal", "Hs Disponibles", "Ocupacion" });
						disponibilidad = new JTable();
						jScrollPane2.setViewportView(disponibilidad);
						disponibilidad.setModel(disponibilidadModel);
						disponibilidad.setBounds(299, 40, 483, 100);
						
						//Este es el list que contiene todas las sucursales
						sucursales = ControladorAC.getInstancia().listarSucursales();
						
						//Se calculan las horas disponibles para produccion y el nivel de ocupacion
						sucursales = ControladorAC.getInstancia().calcularOcupacionSucursales(sucursales);
						//Agrego las tareas en estado "Activa" a la tabla
						objetosDis = new Object[sucursales.size()][disponibilidad.getColumnCount()];
						
						int jj = 0;
						int ii= 0;
						
						for(SucursalDTO s: sucursales){
			
							objetosDis[jj][ii] = s.getNombre();
							objetosDis[jj][ii+1] = s.getHsDisponiblesProduccion();
							objetosDis[jj][ii+2] = (int)(((s.getHsProduccion() - s.getHsDisponiblesProduccion())/s.getHsProduccion()) * 100) + "%";
									
							
							jj++;
						}
						disponibilidadModel = new DefaultTableModel(
								objetosDis, new String[] {"Sucursal", "Hs Disponibles", "Ocupacion"}){
							
						};
						disponibilidad.setModel(disponibilidadModel);
					}
				});
			}
			{
				jLabel4 = new JLabel();
				getContentPane().add(jLabel4);
				jLabel4.setText("Tareas");
				jLabel4.setBounds(43, 178, 93, 16);
			}
			{
				salir = new JButton();
				getContentPane().add(salir);
				salir.setText("Salir");
				salir.setBounds(744, 380, 101, 24);
			}
			{
				jSeparator1 = new JSeparator();
				getContentPane().add(jSeparator1);
				jSeparator1.setBounds(-10, 152, 904, 10);
			}
			{
				jSeparator2 = new JSeparator();
				getContentPane().add(jSeparator2);
				jSeparator2.setBounds(272, 0, 10, 154);
				jSeparator2.setOrientation(SwingConstants.VERTICAL);
			}
			{
				jLabel5 = new JLabel();
				getContentPane().add(jLabel5);
				jLabel5.setText("Disponibilidad Sucursales");
				jLabel5.setBounds(299, 12, 163, 16);
			}
			{
				jScrollPane2 = new JScrollPane();
				getContentPane().add(jScrollPane2);
				jScrollPane2.setBounds(299, 40, 483, 100);
				{
					disponibilidadModel = new DefaultTableModel(
							null, new String[] { "Sucursal", "Hs Disponibles", "Ocupacion" });
					disponibilidad = new JTable();
					jScrollPane2.setViewportView(disponibilidad);
					disponibilidad.setModel(disponibilidadModel);
					disponibilidad.setBounds(299, 40, 483, 100);
					
					//Este es el list que contiene todas las sucursales
					sucursales = ControladorAC.getInstancia().listarSucursales();
					
					//Se calculan las horas disponibles para produccion y el nivel de ocupacion
					sucursales = ControladorAC.getInstancia().calcularOcupacionSucursales(sucursales);
					//Agrego las tareas en estado "Activa" a la tabla
					objetosDis = new Object[sucursales.size()][disponibilidad.getColumnCount()];
					
					int j = 0;
					int i = 0;
					
					for(SucursalDTO s: sucursales){
		
						objetosDis[j][i] = s.getNombre();
						objetosDis[j][i+1] = s.getHsDisponiblesProduccion();
						objetosDis[j][i+2] = (int)(((s.getHsProduccion() - s.getHsDisponiblesProduccion())/s.getHsProduccion()) * 100) + "%";
								
						
						j++;
					}
					disponibilidadModel = new DefaultTableModel(
							objetosDis, new String[] {"Sucursal", "Hs Disponibles", "Ocupacion"}){
						
					};
					disponibilidad.setModel(disponibilidadModel);
				}
			}
			{
				jSeparator3 = new JSeparator();
				getContentPane().add(jSeparator3);
				jSeparator3.setBounds(0, 421, 874, 10);
			}
			{
				jLabel6 = new JLabel();
				getContentPane().add(jLabel6);
				jLabel6.setText("Usuario");
				jLabel6.setBounds(31, 438, 89, 16);
			}
			{
				usuario = new JTextField();
				getContentPane().add(usuario);
				usuario.setEditable(false);
				usuario.setText(e2.getNombre());
				usuario.setBounds(94, 435, 150, 23);
			}
			{
				legajoUsuario = new JTextField();
				getContentPane().add(legajoUsuario);
				legajoUsuario.setEditable(false);
				legajoUsuario.setText(e2.getLegajo());
				legajoUsuario.setBounds(333, 435, 147, 23);
			}
			{
				jLabel7 = new JLabel();
				getContentPane().add(jLabel7);
				jLabel7.setText("Legajo");
				jLabel7.setBounds(267, 438, 80, 16);
			}

			pack();
			this.setSize(890, 503);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
